package com.wyb.hzmt.static_baseFrame_tools0.framework;

import android.app.Activity;
import android.app.Application;
import android.os.Handler;
import com.wyb.hzmt.static_baseFrame_tools0.tools.BaseLog;
import java.util.ArrayList;
import java.util.List;


/**
 * Created by Administrator on 2017/3/6.
 *
 * 共7个方法
 * 1、单例方法组，方法数为1
 * 2、管理activity方法组，方法数为4
 * 3、生命周期方法组，方法数为2

 */

public class MyApplication extends Application {
    private static MyApplication mp;
    private Handler handler = new Handler();
    private String TAG = "MyApplication";

    /**
 * 1、单例方法组，方法数为1
 * 单例模式 [myapplication的单例与一般的单例有所不同，因为他是有生命周期的，在应用被打开时就实例化了自己一次,所以仅仅提供一个公共方法而已]
 */
    public  static MyApplication getInstance() {
        return mp;
    }

/**
 * 2、管理activity方法组，方法数为4
 * 建立一个以activity实例为元素的集合，来管理所有activity
 */
    private static List<Activity> unDestroyActivityList = new ArrayList<Activity>();
    public static List<Activity> getUnDestroyActivityList() {
        return unDestroyActivityList;
    }
    public void addActivity(Activity activity) {
        unDestroyActivityList.add(activity);
    }
    public void RemoveActivity(Activity activity) {
        unDestroyActivityList.remove(activity);
    }
// 关闭每一个list内的activity
    public void exit(boolean exit) {
        try {
            for (Activity activity : unDestroyActivityList) {
                if (activity != null)
                    activity.finish();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            unDestroyActivityList.clear();
            if(exit){
//            如果要退出后立马自杀那就调用它，如果想要退出后活在后台就不调用
            System.exit(0);
            }
        }
    }

/**
 * 3、生命周期方法组，方法数为2
 * 给单例变量mp 赋值
 */
    @Override
    public void onCreate() {
        super.onCreate();
        mp = this;
        BaseLog.e("MyApplication", "MyApplication_---------onCreate----" );
    }


    @Override
    public void onTerminate() {
        // 程序终止的时候执行
        BaseLog.d(TAG, "onTerminate");
        super.onTerminate();
    }
    @Override
    public void onLowMemory() {
        // 低内存的时候执行
        BaseLog.d(TAG, "onLowMemory");
        super.onLowMemory();
        System.gc();
    }
    @Override
    public void onTrimMemory(int level) {
        // 程序在内存清理的时候执行
        BaseLog.d(TAG, "onTrimMemory");
        super.onTrimMemory(level);
    }
    public Handler getHandler() {
        return handler;
    }

}
